<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head><!-- start favicons snippet, use https://realfavicongenerator.net/ --><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"><link rel="manifest" href="/assets/site.webmanifest"><link rel="mask-icon" href="/assets/safari-pinned-tab.svg" color="#fc4d50"><link rel="shortcut icon" href="/assets/favicon.ico"><meta name="msapplication-TileColor" content="#ffc40d"><meta name="msapplication-config" content="/assets/browserconfig.xml"><meta name="theme-color" content="#ffffff"><!-- end favicons snippet -->
<title>ConcatenatingMediaSource (ExoPlayer library)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="ConcatenatingMediaSource (ExoPlayer library)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.google.android.exoplayer2.source</a></div>
<h2 title="Class ConcatenatingMediaSource" class="title">Class ConcatenatingMediaSource</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li><a href="BaseMediaSource.html" title="class in com.google.android.exoplayer2.source">com.google.android.exoplayer2.source.BaseMediaSource</a></li>
<li>
<ul class="inheritance">
<li><a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">com.google.android.exoplayer2.source.CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</li>
<li>
<ul class="inheritance">
<li>com.google.android.exoplayer2.source.ConcatenatingMediaSource</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a></code></dd>
</dl>
<hr>
<pre>public final class <span class="typeNameLabel">ConcatenatingMediaSource</span>
extends <a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</pre>
<div class="block">Concatenates multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s. The list of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s can be modified
 during playback. It is valid for the same <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> instance to be present more than
 once in the concatenation. Access to this class is thread-safe.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!--   -->
</a>
<h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.com.google.android.exoplayer2.source.MediaSource">
<!--   -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;com.google.android.exoplayer2.source.<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a></h3>
<code><a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>, <a href="MediaSource.MediaSourceCaller.html" title="interface in com.google.android.exoplayer2.source">MediaSource.MediaSourceCaller</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(boolean,boolean,com.google.android.exoplayer2.source.ShuffleOrder,com.google.android.exoplayer2.source.MediaSource...)">ConcatenatingMediaSource</a></span>&#8203;(boolean&nbsp;isAtomic,
                        boolean&nbsp;useLazyPreparation,
                        <a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source">ShuffleOrder</a>&nbsp;shuffleOrder,
                        <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>...&nbsp;mediaSources)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(boolean,com.google.android.exoplayer2.source.MediaSource...)">ConcatenatingMediaSource</a></span>&#8203;(boolean&nbsp;isAtomic,
                        <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>...&nbsp;mediaSources)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(boolean,com.google.android.exoplayer2.source.ShuffleOrder,com.google.android.exoplayer2.source.MediaSource...)">ConcatenatingMediaSource</a></span>&#8203;(boolean&nbsp;isAtomic,
                        <a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source">ShuffleOrder</a>&nbsp;shuffleOrder,
                        <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>...&nbsp;mediaSources)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(com.google.android.exoplayer2.source.MediaSource...)">ConcatenatingMediaSource</a></span>&#8203;(<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>...&nbsp;mediaSources)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaSource(int,com.google.android.exoplayer2.source.MediaSource)">addMediaSource</a></span>&#8203;(int&nbsp;index,
              <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource)</code></th>
<td class="colLast">
<div class="block">Adds a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to the playlist.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaSource(int,com.google.android.exoplayer2.source.MediaSource,android.os.Handler,java.lang.Runnable)">addMediaSource</a></span>&#8203;(int&nbsp;index,
              <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource,
              <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
              <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Adds a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to the playlist and executes a custom action on completion.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaSource(com.google.android.exoplayer2.source.MediaSource)">addMediaSource</a></span>&#8203;(<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource)</code></th>
<td class="colLast">
<div class="block">Appends a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to the playlist.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaSource(com.google.android.exoplayer2.source.MediaSource,android.os.Handler,java.lang.Runnable)">addMediaSource</a></span>&#8203;(<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource,
              <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
              <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Appends a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to the playlist and executes a custom action on completion.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaSources(int,java.util.Collection)">addMediaSources</a></span>&#8203;(int&nbsp;index,
               <a href="https://developer.android.com/reference/java/util/Collection.html" title="class or interface in java.util" class="externalLink">Collection</a>&lt;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source" target="_top">MediaSource</a>&gt;&nbsp;mediaSources)</code></th>
<td class="colLast">
<div class="block">Adds multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to the playlist.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaSources(int,java.util.Collection,android.os.Handler,java.lang.Runnable)">addMediaSources</a></span>&#8203;(int&nbsp;index,
               <a href="https://developer.android.com/reference/java/util/Collection.html" title="class or interface in java.util" class="externalLink">Collection</a>&lt;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source" target="_top">MediaSource</a>&gt;&nbsp;mediaSources,
               <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
               <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Adds multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to the playlist and executes a custom action on completion.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaSources(java.util.Collection)">addMediaSources</a></span>&#8203;(<a href="https://developer.android.com/reference/java/util/Collection.html" title="class or interface in java.util" class="externalLink">Collection</a>&lt;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source" target="_top">MediaSource</a>&gt;&nbsp;mediaSources)</code></th>
<td class="colLast">
<div class="block">Appends multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to the playlist.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaSources(java.util.Collection,android.os.Handler,java.lang.Runnable)">addMediaSources</a></span>&#8203;(<a href="https://developer.android.com/reference/java/util/Collection.html" title="class or interface in java.util" class="externalLink">Collection</a>&lt;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source" target="_top">MediaSource</a>&gt;&nbsp;mediaSources,
               <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
               <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Appends multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to the playlist and executes a custom action on
 completion.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clear()">clear</a></span>()</code></th>
<td class="colLast">
<div class="block">Clears the playlist.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clear(android.os.Handler,java.lang.Runnable)">clear</a></span>&#8203;(<a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
     <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Clears the playlist and executes a custom action on completion.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code><a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source">MediaPeriod</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createPeriod(com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.upstream.Allocator,long)">createPeriod</a></span>&#8203;(<a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;id,
            <a href="../upstream/Allocator.html" title="interface in com.google.android.exoplayer2.upstream">Allocator</a>&nbsp;allocator,
            long&nbsp;startPositionUs)</code></th>
<td class="colLast">
<div class="block">Returns a new <a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source"><code>MediaPeriod</code></a> identified by <code>periodId</code>.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#disableInternal()">disableInternal</a></span>()</code></th>
<td class="colLast">
<div class="block">Disables the source, see <a href="BaseMediaSource.html#disable(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)"><code>BaseMediaSource.disable(MediaSourceCaller)</code></a>.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#enableInternal()">enableInternal</a></span>()</code></th>
<td class="colLast">
<div class="block">Enables the source, see <a href="BaseMediaSource.html#enable(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)"><code>BaseMediaSource.enable(MediaSourceCaller)</code></a>.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code><a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getInitialTimeline()">getInitialTimeline</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the initial placeholder timeline that is returned immediately when the real timeline is
 not yet known, or null to let the player create an initial timeline.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code><a href="../MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMediaItem()">getMediaItem</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the <a href="../MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> whose media is provided by the source.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>protected <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMediaPeriodIdForChildMediaPeriodId(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">getMediaPeriodIdForChildMediaPeriodId</a></span>&#8203;(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&nbsp;mediaSourceHolder,
                                     <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</code></th>
<td class="colLast">
<div class="block">Returns the <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> in the composite source corresponding to the specified <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> in a child source.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code><a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMediaSource(int)">getMediaSource</a></span>&#8203;(int&nbsp;index)</code></th>
<td class="colLast">
<div class="block">Returns the <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> at a specified index.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSize()">getSize</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the number of media sources in the playlist.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>protected int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getWindowIndexForChildWindowIndex(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder,int)">getWindowIndexForChildWindowIndex</a></span>&#8203;(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&nbsp;mediaSourceHolder,
                                 int&nbsp;windowIndex)</code></th>
<td class="colLast">
<div class="block">Returns the window index in the composite source corresponding to the specified window index in
 a child source.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isSingleWindow()">isSingleWindow</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns true if the media source is guaranteed to never have zero or more than one window.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#moveMediaSource(int,int)">moveMediaSource</a></span>&#8203;(int&nbsp;currentIndex,
               int&nbsp;newIndex)</code></th>
<td class="colLast">
<div class="block">Moves an existing <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> within the playlist.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#moveMediaSource(int,int,android.os.Handler,java.lang.Runnable)">moveMediaSource</a></span>&#8203;(int&nbsp;currentIndex,
               int&nbsp;newIndex,
               <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
               <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Moves an existing <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> within the playlist and executes a custom action on
 completion.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onChildSourceInfoRefreshed(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder,com.google.android.exoplayer2.source.MediaSource,com.google.android.exoplayer2.Timeline)">onChildSourceInfoRefreshed</a></span>&#8203;(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&nbsp;mediaSourceHolder,
                          <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource,
                          <a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;timeline)</code></th>
<td class="colLast">
<div class="block">Called when the source info of a child source has been refreshed.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#prepareSourceInternal(com.google.android.exoplayer2.upstream.TransferListener)">prepareSourceInternal</a></span>&#8203;(<a href="../upstream/TransferListener.html" title="interface in com.google.android.exoplayer2.upstream">TransferListener</a>&nbsp;mediaTransferListener)</code></th>
<td class="colLast">
<div class="block">Starts source preparation and enables the source, see <a href="BaseMediaSource.html#prepareSource(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller,com.google.android.exoplayer2.upstream.TransferListener)"><code>BaseMediaSource.prepareSource(MediaSourceCaller,
 TransferListener)</code></a>.</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#releasePeriod(com.google.android.exoplayer2.source.MediaPeriod)">releasePeriod</a></span>&#8203;(<a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source">MediaPeriod</a>&nbsp;mediaPeriod)</code></th>
<td class="colLast">
<div class="block">Releases the period.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#releaseSourceInternal()">releaseSourceInternal</a></span>()</code></th>
<td class="colLast">
<div class="block">Releases the source, see <a href="BaseMediaSource.html#releaseSource(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)"><code>BaseMediaSource.releaseSource(MediaSourceCaller)</code></a>.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code><a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removeMediaSource(int)">removeMediaSource</a></span>&#8203;(int&nbsp;index)</code></th>
<td class="colLast">
<div class="block">Removes a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> from the playlist.</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code><a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removeMediaSource(int,android.os.Handler,java.lang.Runnable)">removeMediaSource</a></span>&#8203;(int&nbsp;index,
                 <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                 <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Removes a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> from the playlist and executes a custom action on completion.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removeMediaSourceRange(int,int)">removeMediaSourceRange</a></span>&#8203;(int&nbsp;fromIndex,
                      int&nbsp;toIndex)</code></th>
<td class="colLast">
<div class="block">Removes a range of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s from the playlist, by specifying an initial index
 (included) and a final index (excluded).</div>
</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removeMediaSourceRange(int,int,android.os.Handler,java.lang.Runnable)">removeMediaSourceRange</a></span>&#8203;(int&nbsp;fromIndex,
                      int&nbsp;toIndex,
                      <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                      <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Removes a range of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s from the playlist, by specifying an initial index
 (included) and a final index (excluded), and executes a custom action on completion.</div>
</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setShuffleOrder(com.google.android.exoplayer2.source.ShuffleOrder)">setShuffleOrder</a></span>&#8203;(<a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source">ShuffleOrder</a>&nbsp;shuffleOrder)</code></th>
<td class="colLast">
<div class="block">Sets a new shuffle order to use when shuffling the child media sources.</div>
</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setShuffleOrder(com.google.android.exoplayer2.source.ShuffleOrder,android.os.Handler,java.lang.Runnable)">setShuffleOrder</a></span>&#8203;(<a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source">ShuffleOrder</a>&nbsp;shuffleOrder,
               <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
               <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</code></th>
<td class="colLast">
<div class="block">Sets a new shuffle order to use when shuffling the child media sources.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.source.CompositeMediaSource">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;com.google.android.exoplayer2.source.<a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a></h3>
<code><a href="CompositeMediaSource.html#disableChildSource(T)">disableChildSource</a>, <a href="CompositeMediaSource.html#enableChildSource(T)">enableChildSource</a>, <a href="CompositeMediaSource.html#getMediaTimeForChildMediaTime(T,long)">getMediaTimeForChildMediaTime</a>, <a href="CompositeMediaSource.html#maybeThrowSourceInfoRefreshError()">maybeThrowSourceInfoRefreshError</a>, <a href="CompositeMediaSource.html#prepareChildSource(T,com.google.android.exoplayer2.source.MediaSource)">prepareChildSource</a>, <a href="CompositeMediaSource.html#releaseChildSource(T)">releaseChildSource</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.source.BaseMediaSource">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;com.google.android.exoplayer2.source.<a href="BaseMediaSource.html" title="class in com.google.android.exoplayer2.source">BaseMediaSource</a></h3>
<code><a href="BaseMediaSource.html#addDrmEventListener(android.os.Handler,com.google.android.exoplayer2.drm.DrmSessionEventListener)">addDrmEventListener</a>, <a href="BaseMediaSource.html#addEventListener(android.os.Handler,com.google.android.exoplayer2.source.MediaSourceEventListener)">addEventListener</a>, <a href="BaseMediaSource.html#createDrmEventDispatcher(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">createDrmEventDispatcher</a>, <a href="BaseMediaSource.html#createDrmEventDispatcher(com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">createDrmEventDispatcher</a>, <a href="BaseMediaSource.html#createEventDispatcher(int,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,long)">createEventDispatcher</a>, <a href="BaseMediaSource.html#createEventDispatcher(com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">createEventDispatcher</a>, <a href="BaseMediaSource.html#createEventDispatcher(com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,long)">createEventDispatcher</a>, <a href="BaseMediaSource.html#disable(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)">disable</a>, <a href="BaseMediaSource.html#enable(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)">enable</a>, <a href="BaseMediaSource.html#isEnabled()">isEnabled</a>, <a href="BaseMediaSource.html#prepareSource(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller,com.google.android.exoplayer2.upstream.TransferListener)">prepareSource</a>, <a href="BaseMediaSource.html#refreshSourceInfo(com.google.android.exoplayer2.Timeline)">refreshSourceInfo</a>, <a href="BaseMediaSource.html#releaseSource(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)">releaseSource</a>, <a href="BaseMediaSource.html#removeDrmEventListener(com.google.android.exoplayer2.drm.DrmSessionEventListener)">removeDrmEventListener</a>, <a href="BaseMediaSource.html#removeEventListener(com.google.android.exoplayer2.source.MediaSourceEventListener)">removeEventListener</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a></h3>
<code><a href="https://developer.android.com/reference/java/lang/Object.html#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink" target="_top">wait</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.source.MediaSource">
<!--   -->
</a>
<h3>Methods inherited from interface&nbsp;com.google.android.exoplayer2.source.<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a></h3>
<code><a href="MediaSource.html#getTag()">getTag</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;(com.google.android.exoplayer2.source.MediaSource...)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ConcatenatingMediaSource</h4>
<pre>public&nbsp;ConcatenatingMediaSource&#8203;(<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>...&nbsp;mediaSources)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaSources</code> - The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to concatenate. It is valid for the same
     <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> instance to be present more than once in the array.</dd>
</dl>
</li>
</ul>
<a id="&lt;init&gt;(boolean,com.google.android.exoplayer2.source.MediaSource...)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ConcatenatingMediaSource</h4>
<pre>public&nbsp;ConcatenatingMediaSource&#8203;(boolean&nbsp;isAtomic,
                                <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>...&nbsp;mediaSources)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>isAtomic</code> - Whether the concatenating media source will be treated as atomic, i.e., treated
     as a single item for repeating and shuffling.</dd>
<dd><code>mediaSources</code> - The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to concatenate. It is valid for the same <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> instance to be present more than once in the array.</dd>
</dl>
</li>
</ul>
<a id="&lt;init&gt;(boolean,com.google.android.exoplayer2.source.ShuffleOrder,com.google.android.exoplayer2.source.MediaSource...)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>ConcatenatingMediaSource</h4>
<pre>public&nbsp;ConcatenatingMediaSource&#8203;(boolean&nbsp;isAtomic,
                                <a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source">ShuffleOrder</a>&nbsp;shuffleOrder,
                                <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>...&nbsp;mediaSources)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>isAtomic</code> - Whether the concatenating media source will be treated as atomic, i.e., treated
     as a single item for repeating and shuffling.</dd>
<dd><code>shuffleOrder</code> - The <a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source"><code>ShuffleOrder</code></a> to use when shuffling the child media sources.</dd>
<dd><code>mediaSources</code> - The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to concatenate. It is valid for the same <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> instance to be present more than once in the array.</dd>
</dl>
</li>
</ul>
<a id="&lt;init&gt;(boolean,boolean,com.google.android.exoplayer2.source.ShuffleOrder,com.google.android.exoplayer2.source.MediaSource...)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ConcatenatingMediaSource</h4>
<pre>public&nbsp;ConcatenatingMediaSource&#8203;(boolean&nbsp;isAtomic,
                                boolean&nbsp;useLazyPreparation,
                                <a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source">ShuffleOrder</a>&nbsp;shuffleOrder,
                                <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>...&nbsp;mediaSources)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>isAtomic</code> - Whether the concatenating media source will be treated as atomic, i.e., treated
     as a single item for repeating and shuffling.</dd>
<dd><code>useLazyPreparation</code> - Whether playlist items are prepared lazily. If false, all manifest
     loads and other initial preparation steps happen immediately. If true, these initial
     preparations are triggered only when the player starts buffering the media.</dd>
<dd><code>shuffleOrder</code> - The <a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source"><code>ShuffleOrder</code></a> to use when shuffling the child media sources.</dd>
<dd><code>mediaSources</code> - The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to concatenate. It is valid for the same <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> instance to be present more than once in the array.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a id="getInitialTimeline()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getInitialTimeline</h4>
<pre class="methodSignature">public&nbsp;<a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;getInitialTimeline()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="MediaSource.html#getInitialTimeline()">MediaSource</a></code></span></div>
<div class="block">Returns the initial placeholder timeline that is returned immediately when the real timeline is
 not yet known, or null to let the player create an initial timeline.

 <p>The initial timeline must use the same uids for windows and periods that the real timeline
 will use. It also must provide windows which are marked as dynamic to indicate that the window
 is expected to change when the real timeline arrives.

 <p>Any media source which has multiple windows should typically provide such an initial
 timeline to make sure the player reports the correct number of windows immediately.</div>
</li>
</ul>
<a id="isSingleWindow()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isSingleWindow</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;isSingleWindow()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="MediaSource.html#isSingleWindow()">MediaSource</a></code></span></div>
<div class="block">Returns true if the media source is guaranteed to never have zero or more than one window.

 <p>The default implementation returns <code>true</code>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the source has exactly one window.</dd>
</dl>
</li>
</ul>
<a id="addMediaSource(com.google.android.exoplayer2.source.MediaSource)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaSource</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMediaSource&#8203;(<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource)</pre>
<div class="block">Appends a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to the playlist.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaSource</code> - The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to be added to the list.</dd>
</dl>
</li>
</ul>
<a id="addMediaSource(com.google.android.exoplayer2.source.MediaSource,android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaSource</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMediaSource&#8203;(<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource,
                           <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                           <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Appends a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to the playlist and executes a custom action on completion.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaSource</code> - The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to be added to the list.</dd>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the media
     source has been added to the playlist.</dd>
</dl>
</li>
</ul>
<a id="addMediaSource(int,com.google.android.exoplayer2.source.MediaSource)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaSource</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMediaSource&#8203;(int&nbsp;index,
                           <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource)</pre>
<div class="block">Adds a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to the playlist.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - The index at which the new <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> will be inserted. This index must
     be in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>mediaSource</code> - The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to be added to the list.</dd>
</dl>
</li>
</ul>
<a id="addMediaSource(int,com.google.android.exoplayer2.source.MediaSource,android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaSource</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMediaSource&#8203;(int&nbsp;index,
                           <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource,
                           <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                           <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Adds a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to the playlist and executes a custom action on completion.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - The index at which the new <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> will be inserted. This index must
     be in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>mediaSource</code> - The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> to be added to the list.</dd>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the media
     source has been added to the playlist.</dd>
</dl>
</li>
</ul>
<a id="addMediaSources(java.util.Collection)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaSources</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMediaSources&#8203;(<a href="https://developer.android.com/reference/java/util/Collection.html" title="class or interface in java.util" class="externalLink">Collection</a>&lt;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source" target="_top">MediaSource</a>&gt;&nbsp;mediaSources)</pre>
<div class="block">Appends multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to the playlist.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaSources</code> - A collection of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to be added to the list. The media
     sources are added in the order in which they appear in this collection.</dd>
</dl>
</li>
</ul>
<a id="addMediaSources(java.util.Collection,android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaSources</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMediaSources&#8203;(<a href="https://developer.android.com/reference/java/util/Collection.html" title="class or interface in java.util" class="externalLink">Collection</a>&lt;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source" target="_top">MediaSource</a>&gt;&nbsp;mediaSources,
                            <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                            <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Appends multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to the playlist and executes a custom action on
 completion.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaSources</code> - A collection of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to be added to the list. The media
     sources are added in the order in which they appear in this collection.</dd>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the media
     sources have been added to the playlist.</dd>
</dl>
</li>
</ul>
<a id="addMediaSources(int,java.util.Collection)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaSources</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMediaSources&#8203;(int&nbsp;index,
                            <a href="https://developer.android.com/reference/java/util/Collection.html" title="class or interface in java.util" class="externalLink">Collection</a>&lt;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source" target="_top">MediaSource</a>&gt;&nbsp;mediaSources)</pre>
<div class="block">Adds multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to the playlist.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - The index at which the new <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s will be inserted. This index must
     be in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>mediaSources</code> - A collection of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to be added to the list. The media
     sources are added in the order in which they appear in this collection.</dd>
</dl>
</li>
</ul>
<a id="addMediaSources(int,java.util.Collection,android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaSources</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;addMediaSources&#8203;(int&nbsp;index,
                            <a href="https://developer.android.com/reference/java/util/Collection.html" title="class or interface in java.util" class="externalLink">Collection</a>&lt;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source" target="_top">MediaSource</a>&gt;&nbsp;mediaSources,
                            <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                            <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Adds multiple <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to the playlist and executes a custom action on completion.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - The index at which the new <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s will be inserted. This index must
     be in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>mediaSources</code> - A collection of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s to be added to the list. The media
     sources are added in the order in which they appear in this collection.</dd>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the media
     sources have been added to the playlist.</dd>
</dl>
</li>
</ul>
<a id="removeMediaSource(int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeMediaSource</h4>
<pre class="methodSignature">public&nbsp;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;removeMediaSource&#8203;(int&nbsp;index)</pre>
<div class="block">Removes a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> from the playlist.

 <p>Note: If you want to move the instance, it's preferable to use <a href="#moveMediaSource(int,int)"><code>moveMediaSource(int,
 int)</code></a> instead.

 <p>Note: If you want to remove a set of contiguous sources, it's preferable to use <a href="#removeMediaSourceRange(int,int)"><code>removeMediaSourceRange(int, int)</code></a> instead.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - The index at which the media source will be removed. This index must be in the
     range of 0 &lt;= index &lt; <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The removed <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>.</dd>
</dl>
</li>
</ul>
<a id="removeMediaSource(int,android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeMediaSource</h4>
<pre class="methodSignature">public&nbsp;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;removeMediaSource&#8203;(int&nbsp;index,
                                     <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                                     <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Removes a <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> from the playlist and executes a custom action on completion.

 <p>Note: If you want to move the instance, it's preferable to use <a href="#moveMediaSource(int,int,android.os.Handler,java.lang.Runnable)"><code>moveMediaSource(int,
 int, Handler, Runnable)</code></a> instead.

 <p>Note: If you want to remove a set of contiguous sources, it's preferable to use <a href="#removeMediaSourceRange(int,int,android.os.Handler,java.lang.Runnable)"><code>removeMediaSourceRange(int, int, Handler, Runnable)</code></a> instead.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - The index at which the media source will be removed. This index must be in the
     range of 0 &lt;= index &lt; <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the media
     source has been removed from the playlist.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The removed <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>.</dd>
</dl>
</li>
</ul>
<a id="removeMediaSourceRange(int,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeMediaSourceRange</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;removeMediaSourceRange&#8203;(int&nbsp;fromIndex,
                                   int&nbsp;toIndex)</pre>
<div class="block">Removes a range of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s from the playlist, by specifying an initial index
 (included) and a final index (excluded).

 <p>Note: when specified range is empty, no actual media source is removed and no exception is
 thrown.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fromIndex</code> - The initial range index, pointing to the first media source that will be
     removed. This index must be in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>toIndex</code> - The final range index, pointing to the first media source that will be left
     untouched. This index must be in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://developer.android.com/reference/java/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang" class="externalLink" target="_top">IndexOutOfBoundsException</a></code> - When the range is malformed, i.e. <code>fromIndex</code> &lt; 0,
     <code>toIndex</code> &gt; <a href="#getSize()"><code>getSize()</code></a>, <code>fromIndex</code> &gt; <code>toIndex</code></dd>
</dl>
</li>
</ul>
<a id="removeMediaSourceRange(int,int,android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeMediaSourceRange</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;removeMediaSourceRange&#8203;(int&nbsp;fromIndex,
                                   int&nbsp;toIndex,
                                   <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                                   <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Removes a range of <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a>s from the playlist, by specifying an initial index
 (included) and a final index (excluded), and executes a custom action on completion.

 <p>Note: when specified range is empty, no actual media source is removed and no exception is
 thrown.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fromIndex</code> - The initial range index, pointing to the first media source that will be
     removed. This index must be in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>toIndex</code> - The final range index, pointing to the first media source that will be left
     untouched. This index must be in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the media
     source range has been removed from the playlist.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://developer.android.com/reference/java/lang/IllegalArgumentException.html" title="class or interface in java.lang" class="externalLink" target="_top">IllegalArgumentException</a></code> - When the range is malformed, i.e. <code>fromIndex</code> &lt; 0,
     <code>toIndex</code> &gt; <a href="#getSize()"><code>getSize()</code></a>, <code>fromIndex</code> &gt; <code>toIndex</code></dd>
</dl>
</li>
</ul>
<a id="moveMediaSource(int,int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>moveMediaSource</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;moveMediaSource&#8203;(int&nbsp;currentIndex,
                            int&nbsp;newIndex)</pre>
<div class="block">Moves an existing <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> within the playlist.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>currentIndex</code> - The current index of the media source in the playlist. This index must be
     in the range of 0 &lt;= index &lt; <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>newIndex</code> - The target index of the media source in the playlist. This index must be in the
     range of 0 &lt;= index &lt; <a href="#getSize()"><code>getSize()</code></a>.</dd>
</dl>
</li>
</ul>
<a id="moveMediaSource(int,int,android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>moveMediaSource</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;moveMediaSource&#8203;(int&nbsp;currentIndex,
                            int&nbsp;newIndex,
                            <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                            <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Moves an existing <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> within the playlist and executes a custom action on
 completion.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>currentIndex</code> - The current index of the media source in the playlist. This index must be
     in the range of 0 &lt;= index &lt; <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>newIndex</code> - The target index of the media source in the playlist. This index must be in the
     range of 0 &lt;= index &lt; <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the media
     source has been moved.</dd>
</dl>
</li>
</ul>
<a id="clear()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;clear()</pre>
<div class="block">Clears the playlist.</div>
</li>
</ul>
<a id="clear(android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;clear&#8203;(<a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                  <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Clears the playlist and executes a custom action on completion.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the playlist
     has been cleared.</dd>
</dl>
</li>
</ul>
<a id="getSize()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSize</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;getSize()</pre>
<div class="block">Returns the number of media sources in the playlist.</div>
</li>
</ul>
<a id="getMediaSource(int)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMediaSource</h4>
<pre class="methodSignature">public&nbsp;<a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;getMediaSource&#8203;(int&nbsp;index)</pre>
<div class="block">Returns the <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> at a specified index.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - An index in the range of 0 &lt;= index &lt;= <a href="#getSize()"><code>getSize()</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source"><code>MediaSource</code></a> at this index.</dd>
</dl>
</li>
</ul>
<a id="setShuffleOrder(com.google.android.exoplayer2.source.ShuffleOrder)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setShuffleOrder</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setShuffleOrder&#8203;(<a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source">ShuffleOrder</a>&nbsp;shuffleOrder)</pre>
<div class="block">Sets a new shuffle order to use when shuffling the child media sources.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>shuffleOrder</code> - A <a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source"><code>ShuffleOrder</code></a>.</dd>
</dl>
</li>
</ul>
<a id="setShuffleOrder(com.google.android.exoplayer2.source.ShuffleOrder,android.os.Handler,java.lang.Runnable)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setShuffleOrder</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setShuffleOrder&#8203;(<a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source">ShuffleOrder</a>&nbsp;shuffleOrder,
                            <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top">Handler</a>&nbsp;handler,
                            <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top">Runnable</a>&nbsp;onCompletionAction)</pre>
<div class="block">Sets a new shuffle order to use when shuffling the child media sources.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>shuffleOrder</code> - A <a href="ShuffleOrder.html" title="interface in com.google.android.exoplayer2.source"><code>ShuffleOrder</code></a>.</dd>
<dd><code>handler</code> - The <a href="https://developer.android.com/reference/android/os/Handler.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Handler</code></a> to run <code>onCompletionAction</code>.</dd>
<dd><code>onCompletionAction</code> - A <a href="https://developer.android.com/reference/java/lang/Runnable.html" title="class or interface in java.lang" class="externalLink" target="_top"><code>Runnable</code></a> which is executed immediately after the shuffle
     order has been changed.</dd>
</dl>
</li>
</ul>
<a id="getMediaItem()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMediaItem</h4>
<pre class="methodSignature">public&nbsp;<a href="../MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a>&nbsp;getMediaItem()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="MediaSource.html#getMediaItem()">MediaSource</a></code></span></div>
<div class="block">Returns the <a href="../MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> whose media is provided by the source.</div>
</li>
</ul>
<a id="prepareSourceInternal(com.google.android.exoplayer2.upstream.TransferListener)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>prepareSourceInternal</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;prepareSourceInternal&#8203;(@Nullable
                                     <a href="../upstream/TransferListener.html" title="interface in com.google.android.exoplayer2.upstream">TransferListener</a>&nbsp;mediaTransferListener)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="BaseMediaSource.html#prepareSourceInternal(com.google.android.exoplayer2.upstream.TransferListener)">BaseMediaSource</a></code></span></div>
<div class="block">Starts source preparation and enables the source, see <a href="BaseMediaSource.html#prepareSource(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller,com.google.android.exoplayer2.upstream.TransferListener)"><code>BaseMediaSource.prepareSource(MediaSourceCaller,
 TransferListener)</code></a>. This method is called at most once until the next call to <a href="BaseMediaSource.html#releaseSourceInternal()"><code>BaseMediaSource.releaseSourceInternal()</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="CompositeMediaSource.html#prepareSourceInternal(com.google.android.exoplayer2.upstream.TransferListener)">prepareSourceInternal</a></code>&nbsp;in class&nbsp;<code><a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaTransferListener</code> - The transfer listener which should be informed of any media data
     transfers. May be null if no listener is available. Note that this listener should usually
     be only informed of transfers related to the media loads and not of auxiliary loads for
     manifests and other data.</dd>
</dl>
</li>
</ul>
<a id="enableInternal()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>enableInternal</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;enableInternal()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="BaseMediaSource.html#enableInternal()">BaseMediaSource</a></code></span></div>
<div class="block">Enables the source, see <a href="BaseMediaSource.html#enable(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)"><code>BaseMediaSource.enable(MediaSourceCaller)</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="CompositeMediaSource.html#enableInternal()">enableInternal</a></code>&nbsp;in class&nbsp;<code><a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</code></dd>
</dl>
</li>
</ul>
<a id="createPeriod(com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.upstream.Allocator,long)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createPeriod</h4>
<pre class="methodSignature">public&nbsp;<a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source">MediaPeriod</a>&nbsp;createPeriod&#8203;(<a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;id,
                                <a href="../upstream/Allocator.html" title="interface in com.google.android.exoplayer2.upstream">Allocator</a>&nbsp;allocator,
                                long&nbsp;startPositionUs)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="MediaSource.html#createPeriod(com.google.android.exoplayer2.source.MediaSource.MediaPeriodId,com.google.android.exoplayer2.upstream.Allocator,long)">MediaSource</a></code></span></div>
<div class="block">Returns a new <a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source"><code>MediaPeriod</code></a> identified by <code>periodId</code>.

 <p>Should not be called directly from application code.

 <p>Must only be called if the source is enabled.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>id</code> - The identifier of the period.</dd>
<dd><code>allocator</code> - An <a href="../upstream/Allocator.html" title="interface in com.google.android.exoplayer2.upstream"><code>Allocator</code></a> from which to obtain media buffer allocations.</dd>
<dd><code>startPositionUs</code> - The expected start position, in microseconds.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A new <a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source"><code>MediaPeriod</code></a>.</dd>
</dl>
</li>
</ul>
<a id="releasePeriod(com.google.android.exoplayer2.source.MediaPeriod)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>releasePeriod</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;releasePeriod&#8203;(<a href="MediaPeriod.html" title="interface in com.google.android.exoplayer2.source">MediaPeriod</a>&nbsp;mediaPeriod)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="MediaSource.html#releasePeriod(com.google.android.exoplayer2.source.MediaPeriod)">MediaSource</a></code></span></div>
<div class="block">Releases the period.

 <p>Should not be called directly from application code.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaPeriod</code> - The period to release.</dd>
</dl>
</li>
</ul>
<a id="disableInternal()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>disableInternal</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;disableInternal()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="BaseMediaSource.html#disableInternal()">BaseMediaSource</a></code></span></div>
<div class="block">Disables the source, see <a href="BaseMediaSource.html#disable(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)"><code>BaseMediaSource.disable(MediaSourceCaller)</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="CompositeMediaSource.html#disableInternal()">disableInternal</a></code>&nbsp;in class&nbsp;<code><a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</code></dd>
</dl>
</li>
</ul>
<a id="releaseSourceInternal()">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>releaseSourceInternal</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;releaseSourceInternal()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="BaseMediaSource.html#releaseSourceInternal()">BaseMediaSource</a></code></span></div>
<div class="block">Releases the source, see <a href="BaseMediaSource.html#releaseSource(com.google.android.exoplayer2.source.MediaSource.MediaSourceCaller)"><code>BaseMediaSource.releaseSource(MediaSourceCaller)</code></a>. This method is called
 exactly once after each call to <a href="BaseMediaSource.html#prepareSourceInternal(com.google.android.exoplayer2.upstream.TransferListener)"><code>BaseMediaSource.prepareSourceInternal(TransferListener)</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="CompositeMediaSource.html#releaseSourceInternal()">releaseSourceInternal</a></code>&nbsp;in class&nbsp;<code><a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</code></dd>
</dl>
</li>
</ul>
<a id="onChildSourceInfoRefreshed(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder,com.google.android.exoplayer2.source.MediaSource,com.google.android.exoplayer2.Timeline)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>onChildSourceInfoRefreshed</h4>
<pre class="methodSignature">protected&nbsp;void&nbsp;onChildSourceInfoRefreshed&#8203;(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&nbsp;mediaSourceHolder,
                                          <a href="MediaSource.html" title="interface in com.google.android.exoplayer2.source">MediaSource</a>&nbsp;mediaSource,
                                          <a href="../Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;timeline)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="CompositeMediaSource.html#onChildSourceInfoRefreshed(T,com.google.android.exoplayer2.source.MediaSource,com.google.android.exoplayer2.Timeline)">CompositeMediaSource</a></code></span></div>
<div class="block">Called when the source info of a child source has been refreshed.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="CompositeMediaSource.html#onChildSourceInfoRefreshed(T,com.google.android.exoplayer2.source.MediaSource,com.google.android.exoplayer2.Timeline)">onChildSourceInfoRefreshed</a></code>&nbsp;in class&nbsp;<code><a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaSourceHolder</code> - The unique id used to prepare the child source.</dd>
<dd><code>mediaSource</code> - The child source whose source info has been refreshed.</dd>
<dd><code>timeline</code> - The timeline of the child source.</dd>
</dl>
</li>
</ul>
<a id="getMediaPeriodIdForChildMediaPeriodId(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMediaPeriodIdForChildMediaPeriodId</h4>
<pre class="methodSignature">@Nullable
protected&nbsp;<a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;getMediaPeriodIdForChildMediaPeriodId&#8203;(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&nbsp;mediaSourceHolder,
                                                                          <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source">MediaSource.MediaPeriodId</a>&nbsp;mediaPeriodId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="CompositeMediaSource.html#getMediaPeriodIdForChildMediaPeriodId(T,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">CompositeMediaSource</a></code></span></div>
<div class="block">Returns the <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> in the composite source corresponding to the specified <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> in a child source. The default implementation does not change the media period
 id.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="CompositeMediaSource.html#getMediaPeriodIdForChildMediaPeriodId(T,com.google.android.exoplayer2.source.MediaSource.MediaPeriodId)">getMediaPeriodIdForChildMediaPeriodId</a></code>&nbsp;in class&nbsp;<code><a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaSourceHolder</code> - The unique id used to prepare the child source.</dd>
<dd><code>mediaPeriodId</code> - A <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> of the child source.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The corresponding <a href="MediaSource.MediaPeriodId.html" title="class in com.google.android.exoplayer2.source"><code>MediaSource.MediaPeriodId</code></a> in the composite source. Null if no
     corresponding media period id can be determined.</dd>
</dl>
</li>
</ul>
<a id="getWindowIndexForChildWindowIndex(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder,int)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getWindowIndexForChildWindowIndex</h4>
<pre class="methodSignature">protected&nbsp;int&nbsp;getWindowIndexForChildWindowIndex&#8203;(com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&nbsp;mediaSourceHolder,
                                                int&nbsp;windowIndex)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="CompositeMediaSource.html#getWindowIndexForChildWindowIndex(T,int)">CompositeMediaSource</a></code></span></div>
<div class="block">Returns the window index in the composite source corresponding to the specified window index in
 a child source. The default implementation does not change the window index.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="CompositeMediaSource.html#getWindowIndexForChildWindowIndex(T,int)">getWindowIndexForChildWindowIndex</a></code>&nbsp;in class&nbsp;<code><a href="CompositeMediaSource.html" title="class in com.google.android.exoplayer2.source">CompositeMediaSource</a>&lt;com.google.android.exoplayer2.source.ConcatenatingMediaSource.MediaSourceHolder&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaSourceHolder</code> - The unique id used to prepare the child source.</dd>
<dd><code>windowIndex</code> - A window index of the child source.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The corresponding window index in the composite source.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>
